(PAT B1001)害死人不偿命的(3n+1)猜想

每天一点小算法~
2018.12.10

(PAT B1001)害死人不偿命的(3n+1)猜想

题目:卡拉兹猜想:

对任何一个自然是n,如果它是偶数,那么把它砍掉一半了如果它是奇数,那么把(3n+1)砍掉一半,这样一直反复砍下去,最后一定在某一步得到n=1.

问题:
对给定的任一不超过1000的正整数n,简单的数一下,需要多少步才能得到n=1?

思路:

1.判断n是否为1,如果是,退出
2.如果n不是1,判断是否是偶数,如果不是,使用(3n+1),然后开始对半砍,计算步数+1,如果是,直接对半砍,计算步数。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstdio>
int main(){
int n,step = 0;
scanf(“%d”,&n);
while(n != 1){
if(n%2==0)
n = n/2;
else
n = (3n+1)/2;
step++;
}
printf(“%d\n”,step);
return 0;
}

注意

第一步的判断是否为1不要漏掉!